#ifndef INDICE_H_
#define INDICE_H_

#include "../claves/Key.h"
#include "../Constantes.h"
#include "../claves/TipoClave.h"

class RecursoDeAlmacenamiento;

class Indice {

protected:
	TipoClave* extractor;
	bool vacio;

public:

	/*
	 * Pre: Extractor distinto a null.
	 * Pos: Crea una nueva instancia.
	 */
	Indice(TipoClave* extractor);

	/*
	 * Pre: -
	 * Pos: Libera los recursos instanciados.
	 */
	virtual ~Indice();

	/*
	 * Pre: -
	 * Pos: Devuelve si el indice esta vacio.
	 */
	bool estaVacio();

	/*
	 * Pre: -
	 * Pos: Devuelve true si la clave esta en el indice.
	 */
	virtual bool existeClave(Key clave)=0;

	/*
	 * Pre: -
	 * Pos: Indexa el recurso.
	 */
	virtual bool indexar(RecursoDeAlmacenamiento* recurso);

	/*
	 * Pre: -
	 * Pos: Devuelve el numero de componente.
	 */
	virtual bool getNumComponente(Key clave,offset& numComponente) = 0;

	/*
	 * Pre: -
	 * Pos: Agrega la clave.
	 */
	virtual bool agregar(Key clave, offset numComponente) = 0;

	/*
	 * Pre: -
	 * Pos: Quita la clave.
	 */
	virtual bool quitar(Key clave, offset& numComponente) = 0;

	/*
	 * Pre: -
	 * Pos: Visualiza el indice.
	 */
	virtual void visualizar();

	/*
	 * Pre: -
	 * Pos: Devuelve el extractor del indice.
	 */
	TipoClave* getExtractor();
};

#endif /* INDICE_H_ */
